// 模板替换
export const templateReplace = (templateStr, params) => {
    return templateStr.replace(/\$\{(\w+)\}/g, (match, key) => {
        return typeof params[key] !== 'undefined' ? params[key] : match;
    });
}

// 获取两个关键字之间的内容
export const getContentBetweenLast = function (str, startMarker, endMarker) {
    str = str.replace(/\*/g, "").replace(/：/g, ":");
    const endIndex = str.lastIndexOf(endMarker);
    const startIndex = str.lastIndexOf(startMarker);

    if (startIndex === -1 || endIndex === -1 || startIndex >= endIndex) {
        // 没有找到标记，或者起始标记出现在结束标记之后
        return null;
    }

    // 返回两个标记之间的内容，不包含标记本身
    return str.substring(startIndex + startMarker.length, endIndex).trim();
}

export const getContentBetweenStart = function (str, startMarker, endMarker) {
    str = str.replace(/\*/g, "").replace(/：/g, ":");
    const startIndex = str.indexOf(startMarker) > 0 ? str.indexOf(startMarker) : 0;
    const endIndex = str.indexOf(endMarker) > 0 ? str.indexOf(endMarker) : str.length;

    if (startIndex === -1 || endIndex === -1 || startIndex >= endIndex) {
        // 没有找到标记，或者起始标记出现在结束标记之后
        return null;
    }

    // 返回两个标记之间的内容，不包含标记本身
    return str.substring(startIndex + startMarker.length, endIndex).trim();
}

/**
 * 数据转为表格格式
 */
export const arrayToCSV = (objects) => {
    if (objects.length === 0) {
        return '查询结果为空';
    }
    // 提取对象键作为CSV标题
    const csvRows = [];
    const headers = Object.keys(objects[0]);
    csvRows.push(headers.join(','));

    // 遍历对象，将每个对象的值转换为CSV行
    for (const row of objects) {
        const values = headers.map(header => {
            const escaped = ('' + row[header]).replace(/"/g, '\\"'); // 转义双引号
            return `"${escaped}"`; // 引用值
        });
        csvRows.push(values.join(','));
    }

    return csvRows.join('\n'); // 每行后面添加换行符
}

// 自动格式化
export const autoFormatValue = (value) => {
    if (value instanceof Date) {
        const pad = (s) => (s < 10 ? '0' + s : s);

        const year = value.getFullYear();
        const month = pad(value.getMonth() + 1); // 月份是从0开始的
        const day = pad(value.getDate());
        const hours = pad(value.getHours());
        const minutes = pad(value.getMinutes());
        const seconds = pad(value.getSeconds());

        return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    }
    return value;
}